/*Die Klasse Mahnungsverwaltung setzt eine Gebuehr am Benutzer,

 * wenn das Ruckgabedatum des Mediums ueberschrieten ist ,wird  
 * die Manhstufe des Benutzers erhoeht .
 * In dieser Klasse wird auch der Benutzer gesperrt,wenn die Mahnstufe
 * 3 erreicht hatund er hat kann dann nur entsperrt ,wenn er die 
 * entsprechende Gebuehren bezahlen hat.
 * 
 * 
 * Datei: Mahnungsverwaltung.java           Autor: Stive Hogmeni

 * Datum: 27.12.11                          Version: 0.8
 * 
 */
package bestellungsverwaltung;

//import java.util.ArrayList;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import medienverwaltung.KeinDatumFormat;

import personenverwaltung.AktuellesDatum;
import personenverwaltung.Ausleihe;
import personenverwaltung.Benutzer;
import personenverwaltung.Datum;
import personenverwaltung.MedienVorgang;
import personenverwaltung.Personenverwaltung;

//import personenverwaltung.Vorgangsverwaltung;

public class Mahnungsverwaltung
{
  /* Definition der Attribute */

  private Mahnung m;
  Finanzen f = new Finanzen ();
  Finanzen_gui fg = new Finanzen_gui ();
  Personenverwaltung pVerw = new Personenverwaltung ();


  /* Konstruktor */

  public Mahnungsverwaltung ()
  {
    m = new Mahnung ();

  }


  /**
   * prueft ,ob das Ruckgabedatum ueberschritten wurde
   * 
   * 
   * @param ID
   *          des Benutzers
   * 
   */
  public void MahnungsNachBenutzer (int id)
  {

    Datum d = AktuellesDatum.gibAktuellesDatum ();
/*greife ich der Benutzer durch seine IDnummer */
    Benutzer b = pVerw.gibBenutzer (id);

    /*erzeugt eine Liste von Typ MedienVorgang */
    List<MedienVorgang> leihListe = new ArrayList<MedienVorgang> ();

    if (b == null)
    {
    
      System.out.println ("Kein Benutzer");
      return;
    }
    /*bekomme ich alle ausgeliehene Mediums des Benutzers*/
    leihListe = b.gibAusleihListe ();
  
    for (MedienVorgang mv : leihListe)
    {
/*es wird geprueft,ob das ausgeliehene Mediums 
 * rechtzeitig abgegeben wurde*/
      Ausleihe a = (Ausleihe) mv;
      Datum leihEnde = a.gibAusleihEnde ();
      
      boolean abgelaufen = d.istNach (leihEnde);
    
      if (abgelaufen)
      {

        MahnungUeberwacher (b);
      }

    }
  }


  /**
   * 
   * sperrt der Benutzer ,wenn er die Stufe 3 erreicht hat,
   * 
   * @param ein
   *          Benutzer
   * 
   */
  public void MahnungUeberwacher (Benutzer b)
  {

    
//    b.setzeMahnung (m);


/*wird die Aktuelle Mahngebuehr des Benutzers ermittelt.
 * Dieser darf ausleihen,solange seine Mahngebuehr nicht 
 * 9 erreicht hat,sonst wird er gesperrt
 * */
    if (b.gibMahngebuehr () < 9)
    {
      b.gibRechte ().setzAusleihberechtigung (true);

      m.setzemahngebuehr (b.gibMahngebuehr () + 3);

      m.setzemahnstufe (b.gibMahnung ().gibmahnstufe () + 1);

    }
    if (b.gibMahngebuehr () >= 9)
    {
      b.gibRechte ().setzAusleihberechtigung (false);

    }
  }


  /**
   * wird der Benutzer entsperrt,wenn er bezahlen hat.
   * dann wird seine Mahngebuehr und Mahnstufe dekrem
   * entiert
   * @param der
   *          einzuzahlende Betrag und der Benutzer
   */
  public void mahngebuehrBezahlen (double betrag, Benutzer b)
  {
   
    if (betrag > 0)
    {
      if (betrag == b.gibMahngebuehr ())
      {
        b.gibRechte ().setzAusleihberechtigung (true);

        m.setzemahngebuehr (b.gibMahngebuehr () - 3);
        m.setzemahnstufe (b.gibMahnung ().gibmahnstufe () - 1);
        b.setzeMahnung (m);
       
      }
      else
      {

        b.gibRechte ().setzAusleihberechtigung (false);
        double d = b.gibMahngebuehr () - betrag;
        m.setzemahngebuehr (d);
        b.setzeMahnung (m);
        
      }
    }

  }


  public static void main (String[] args) throws IOException,
      KeinDatumFormat
  {
    // TODO Auto-generated method stub
Mahnungsverwaltung mv = new Mahnungsverwaltung ();
mv.MahnungsNachBenutzer (10005);
//mv.mahngebuehrBezahlen (betrag, 10005);
  }
}
